import { Module, VuexModule, Mutation, Action } from 'vuex-module-decorators'
import Cookie from 'js-cookie'
import { Admin, Api } from '~/config/api'
import { $wAxios } from '@/utils/api'

@Module({
  name: 'auth',
  stateFactory: true,
  namespaced: true
})
export default class AuthModule extends VuexModule {
  /**
   * 用户名
   */
  user = ''
  /**
   * 用户头像
   */
  icon = ''
  /**
   * 用户类型
   */
  type = ''
  /**
   * 侧边栏列表
   */
  pages = []

  @Mutation
  SET_USER_DATA (data?: Partial<AuthModule>) {
    Object.assign(this, data)
  }

  @Mutation
  CLEAR_USER_DATA () {
    this.user = ''
    this.icon = ''
    this.type = ''
    this.pages = []
  }

  /**
   * 登录
   */
  @Action({ rawError: true })
  async LOGIN (data: any) {
    const resData = await $wAxios.$post(Api.user.login, data)
    this.SET_USER_DATA(resData)
    // @ts-ignore
    Cookie.set(process.env.ADMIN_LOGIN, true)
  }

  /**
   * 获取登录的用户信息
   */
  @Action
  async SESSION_LOGIN () {
    const resData = await $wAxios.$get(Api.user.sessionLogin)
    this.SET_USER_DATA(resData)
  }

  /**
   * 退出登录
   */
  @Action
  async LOGOUT () {
    this.CLEAR_USER_DATA()
    // @ts-ignore
    Cookie.remove(process.env.ADMIN_LOGIN)
    await $wAxios.$get(Admin.auth.user.logout)
  }

  /**
   * 更新当前用户数据
   */
  @Action
  UPDATE_USER (data = {}) {
    return $wAxios.$put(Admin.auth.user.update, data)
  }

  /**
   * 登录
   */
  get IS_LOGIN () {
    return this.user
  }

  /**
   * 用户名称
   */
  get USER () {
    return this.user
  }

  /**
   * 用户头像
   */
  get USER_ICON () {
    return this.icon
  }

  /**
   * 侧边栏列表
   */
  get MENU_LIST () {
    return this.pages
  }

  /**
   * 用户类型
   */
  get USER_TYPE () {
    return this.type
  }
}
